In the software industry, designing of software programs or software products typically begins with a modeling stage. In general, at the modeling level a “problem” is posed in terms of a customer's needs and requirements and may be referred to as the business problem system. The software designer develops a “solution” software product and/or service that addresses the problem. A modeling language, such as UML, has a syntax that enables software designers to express (specify and document) the subject problems and solutions in a standardized manner. The modeling language semantics enable knowledge about the subject system to be captured and leveraged during the problem solving phase. As such, the modeling language enables the sharing of information (including prior solution portions) and extension (without re-implementation) of core object oriented concepts (analysis and design) during the iterative problem-solving process for designing software products.
Model to Model Transformations transform models (Source model) based on any meta-model (source meta-model) to models (target model) based on any meta-model (target meta-model), provided some mapping exists from source meta-model to target meta-model. Further, an element in the source model is referred to as a source element and an element in the target model is referred to as a target element.
Existing technologies doing such transformations on any element in the source model, have to transform all the children of the source element and also references to any other element in the source model. This process is recursive where in any element transformed in the source model results in transformation of its children and references.
If required, to keep this transformed model coherent with the source model, the existing transformation solutions listen to changes to elements in the source model and do the necessary transformations in the target model. Since transformation of every source element results in transformation of other elements in the source model, the Listener routine (procedure) has to listen to all these source elements that are transformed.
The existing transformation solutions are highly inefficient as they sometimes do unnecessary transformations. Live Transformed models are slow because the Listener routine has to handle too many events resulting from unnecessary transformations.
To overcome some of these issues, some transformation solutions allow clients of the transformed model to control every transformation, where a client has to call a transform on every contained element of the source element. But then the client has to deal with both source model and target model, even though the client is only interested in the target model.